import { MCTSGameMove } from "./MCTSGameMove";

/**
 * 获胜状况
 */
export enum GameResult {
    NoOutcome = 0,
    PlayerWon,
    ComputerWon,
    Draw
}

export interface MCTSGameState {
    /**
     * 检查当前游戏状态是否存在尚未展开的子状态
     */
    existsUnexpandedChild(existingChildren: MCTSGameState[]): boolean;

    /**
     * 随机地将游戏推进一步
     */
    expand(existingChildren: MCTSGameState[]): MCTSGameState;

    /**
     * 从当前游戏状态开始，使用随机方法模拟一次完整的游戏，告知游戏结果
     */
    simulate(): boolean;

    /**
     * 依据最后一步，评判胜利者
     */
    judgeLastMove(): GameResult;

    /**
     * 返回当前游戏状态的最后一步
     */
    returnLastMove(): MCTSGameMove;
}